home *** CD-ROM | disk | FTP | other *** search
- /*
- (c) Copyright Taiichi Yuasa and Masami Hagiya, 1984. All rights reserved.
- Copying of this file is authorized to users who have executed the true and
- proper "License Agreement for Kyoto Common LISP" with SIGLISP.
- */
-
- /*
-
- lex.h
-
- lexical environment
- */
-
-
- object *lex_env;
-
- object Sfunction;
- object Smacro;
- object Stag;
- object Sblock;
-
-
- /*
- VS
- | |
- |---------------|
- lex_env ------> | lex-var | : lex_env[0]
- |---------------|
- | lex-fd | : lex_env[1]
- |---------------|
- | lex-tag | : lex_env[2]
- |---------------|
- | |
- | |
- | |
-
- lex-var: (symbol value) ; for local binding
- (.... or ....)
- (symbol) ; for special binding
-
- lex-fd: (fun-name 'FUNCTION' function)
- (.... or ...)
- (macro-name 'MACRO' expansion-function)
-
- lex-tag: (tag 'TAG' frame-id)
- (.... or ....)
- (block-name 'BLOCK' frame-id)
-
- where 'FUN' is the LISP object with pname FUN, etc.
-
-
- */
-
- #define lex_copy() ihs_top->ihs_base = vs_top; \
- vs_push(lex_env[0]); \
- vs_push(lex_env[1]); \
- vs_push(lex_env[2]); \
- lex_env = vs_top - 3
-
- #define lex_new() ihs_top->ihs_base = vs_top; \
- lex_env = vs_top; \
- vs_top[0] = vs_top[1] = vs_top[2] = Cnil; \
- vs_top += 3
-
- #define lex_var_sch(name) assoc_eq((name),lex_env[0])
-
- #define lex_fd_sch(name) assoc_eq((name),lex_env[1])
-
-